package other;

public class maxProfit_394 {
    public int maxProfit(int[] prices) {
        int[] dp =new int[4];
        dp[0]=-prices[0];         //持有
//   dp[1]    //未持有，之前卖出
//   dp[2]     //未持有，今天卖出 ,设置这个状态为了区分其他状态判断昨天的操作
//   dp[3]     //今天是冷冻期，说明昨天卖出
        for(int i=1;i<prices.length;i++){
            //dp[0], dp[2] 会更新
            int temp0=dp[0];
            int temp2=dp[2];
            //（昨天是否是冷冻期的两种情况）今天买入，或者前面买入
            dp[0] = Math.max( dp[0] ,Math.max( dp[0]-prices[i] , dp[3]-prices[i]) );
            // 未持有，昨天是卖出态或冷冻期
            dp[1] = Math.max( dp[1] , dp[3]);
            // 今天卖出，昨天一定是持有态
            dp[2] = temp0 + prices[i];
            //今天是冷冻期，说明昨天卖出
            dp[3] = temp2;
        }
        return Math.max(dp[1],Math.max(dp[2],dp[3]));
    }
}
